import fetch from 'node-fetch';

export interface DeepSeekMessage {
  role: 'system' | 'user' | 'assistant';
  content: string;
}

export interface DeepSeekCompletionRequest {
  model: string;
  messages: DeepSeekMessage[];
  temperature?: number;
  max_tokens?: number;
  top_p?: number;
  frequency_penalty?: number;
  presence_penalty?: number;
  stream?: boolean;
}

export interface DeepSeekCompletionResponse {
  id: string;
  object: string;
  created: number;
  model: string;
  choices: {
    index: number;
    message: {
      role: string;
      content: string;
    };
    finish_reason: string;
  }[];
  usage: {
    prompt_tokens: number;
    completion_tokens: number;
    total_tokens: number;
  };
}

/**
 * DeepSeek API客户端 - OpenAI兼容接口
 * 支持通过OpenAI兼容的API格式调用DeepSeek模型
 */
export class DeepSeekAPI {
  private readonly apiKey: string;
  private readonly baseURL: string;
  private readonly defaultModel: string;

  constructor() {
    this.apiKey = process.env.DEEPSEEK_API_KEY || 'sk-5688af2b98f9428d9c1f589d13035efc';
    this.baseURL = process.env.DEEPSEEK_BASE_URL || 'https://api.deepseek.com/v1';
    this.defaultModel = process.env.DEEPSEEK_MODEL || 'deepseek-chat';

    if (!this.apiKey) {
      throw new Error('DEEPSEEK_API_KEY环境变量未设置');
    }
  }

  /**
   * 调用DeepSeek聊天完成API
   * @param messages 消息数组
   * @param options 可选参数
   * @returns API响应
   */
  async createChatCompletion(
    messages: DeepSeekMessage[],
    options: Partial<DeepSeekCompletionRequest> = {}
  ): Promise<DeepSeekCompletionResponse> {
    const requestBody: DeepSeekCompletionRequest = {
      model: options.model || this.defaultModel,
      messages,
      temperature: options.temperature ?? 0.7,
      max_tokens: options.max_tokens ?? 2000,
      top_p: options.top_p ?? 1,
      frequency_penalty: options.frequency_penalty ?? 0,
      presence_penalty: options.presence_penalty ?? 0,
      stream: false,
      ...options
    };

    try {
      const response = await fetch(`${this.baseURL}/chat/completions`, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${this.apiKey}`,
        },
        body: JSON.stringify(requestBody),
      });

      if (!response.ok) {
        const errorText = await response.text();
        throw new Error(`DeepSeek API请求失败: ${response.status} ${response.statusText} - ${errorText}`);
      }

      const data = await response.json() as DeepSeekCompletionResponse;
      return data;
    } catch (error) {
      console.error('DeepSeek API调用失败:', error);
      throw new Error(`DeepSeek API调用失败: ${error instanceof Error ? error.message : '未知错误'}`);
    }
  }

  /**
   * 简化的文本生成接口
   * @param prompt 提示文本
   * @param systemPrompt 系统提示(可选)
   * @param options 可选参数
   * @returns 生成的文本内容
   */
  async generateText(
    prompt: string,
    systemPrompt?: string,
    options: Partial<DeepSeekCompletionRequest> = {}
  ): Promise<string> {
    const messages: DeepSeekMessage[] = [];
    
    if (systemPrompt) {
      messages.push({ role: 'system', content: systemPrompt });
    }
    
    messages.push({ role: 'user', content: prompt });

    const response = await this.createChatCompletion(messages, options);
    
    if (!response.choices || response.choices.length === 0) {
      throw new Error('DeepSeek API未返回有效响应');
    }

    return response.choices[0].message.content;
  }

  /**
   * 股票分析专用接口
   * @param stockData 股票数据
   * @param analysisType 分析类型
   * @returns AI分析结果
   */
  async analyzeStock(stockData: any, analysisType: 'individual' | 'category' = 'individual'): Promise<string> {
    const systemPrompt = this.getStockAnalysisSystemPrompt(analysisType);
    const userPrompt = this.formatStockDataForAnalysis(stockData, analysisType);

    return this.generateText(userPrompt, systemPrompt, {
      temperature: 0.3, // 降低随机性，提高分析准确性
      max_tokens: 3000,
    });
  }

  /**
   * 获取股票分析的系统提示
   */
  private getStockAnalysisSystemPrompt(analysisType: 'individual' | 'category'): string {
    if (analysisType === 'individual') {
      return `你是一位专业的股票分析师，具有丰富的A股、港股、美股等全球股票市场分析经验。
请基于提供的股票数据进行全面分析，并以JSON格式返回分析结果。

分析要求：
1. 综合评分(1-10分)：基于技术面、基本面、市场表现等因素
2. 投资建议：买入/持有/卖出，并说明理由
3. 风险等级：低风险/中等风险/高风险
4. 技术面分析：基于价格走势、成交量等技术指标
5. 基本面分析：基于市盈率、市净率、股息率等财务指标
6. 市场情绪分析：基于涨跌幅、成交额等市场表现
7. 关键影响因素：列出3-5个关键因素
8. 目标价位：预期的合理价位区间
9. 信心指数(1-10)：对分析结果的信心程度

返回格式为JSON：
{
  "overallScore": 数字,
  "investmentAdvice": "建议内容",
  "riskLevel": "风险等级",
  "technicalAnalysis": "技术面分析",
  "fundamentalAnalysis": "基本面分析", 
  "marketSentiment": "市场情绪分析",
  "keyFactors": ["因素1", "因素2", "因素3"],
  "targetPriceRange": "价格区间",
  "confidenceLevel": 数字
}`;
    } else {
      return `你是一位专业的股票市场分析师，专注于大盘和板块分析。
请基于提供的市场数据进行整体分析，并以JSON格式返回分析结果。

分析要求：
1. 市场整体评分(1-10分)
2. 市场趋势判断：上涨/下跌/震荡
3. 投资建议：积极配置/谨慎配置/规避风险
4. 市场热点：当前市场关注的热点板块或主题
5. 风险提示：需要注意的市场风险
6. 机会分析：值得关注的投资机会
7. 技术指标分析：基于整体市场技术指标
8. 资金流向分析：市场资金的流入流出情况

返回格式为JSON：
{
  "marketScore": 数字,
  "trendDirection": "趋势方向",
  "investmentStrategy": "投资策略",
  "hotSectors": ["热点1", "热点2"],
  "riskWarnings": ["风险1", "风险2"],
  "opportunities": ["机会1", "机会2"],
  "technicalIndicators": "技术指标分析",
  "capitalFlow": "资金流向分析"
}`;
    }
  }

  /**
   * 格式化股票数据用于AI分析
   */
  private formatStockDataForAnalysis(stockData: any, analysisType: 'individual' | 'category'): string {
    if (analysisType === 'individual') {
      return `请分析以下股票数据：

股票基本信息：
- 股票代码：${stockData.stockCode || '未知'}
- 股票名称：${stockData.stockName || '未知'}
- 所属市场：${stockData.market?.marketName || '未知'}
- 行业：${stockData.industry || '未知'}
- 板块：${stockData.sector || '未知'}

实时行情数据：
- 当前价格：${stockData.realtime?.currentPrice || '未知'}
- 开盘价：${stockData.realtime?.openPrice || '未知'}
- 昨收价：${stockData.realtime?.closePrice || '未知'}
- 最高价：${stockData.realtime?.highPrice || '未知'}
- 最低价：${stockData.realtime?.lowPrice || '未知'}
- 涨跌额：${stockData.realtime?.changeAmount || '未知'}
- 涨跌幅：${stockData.realtime?.changePercent || '未知'}%
- 成交量：${stockData.realtime?.volume || '未知'}
- 成交额：${stockData.realtime?.turnover || '未知'}

估值指标：
- 市盈率(PE)：${stockData.realtime?.peRatio || '未知'}
- 市净率(PB)：${stockData.realtime?.pbRatio || '未知'}
- 总市值：${stockData.realtime?.marketCap || '未知'}
- 流通市值：${stockData.realtime?.circulationMarketCap || '未知'}

请基于以上数据进行专业分析。`;
    } else {
      return `请分析以下市场数据：

市场概况：
- 市场名称：${stockData.categoryName || '未知'}
- 股票总数：${stockData.totalStocks || '未知'}
- 上涨股票数：${stockData.riseCount || '未知'}
- 下跌股票数：${stockData.fallCount || '未知'}
- 平盘股票数：${stockData.flatCount || '未知'}

涨跌分布：
- 涨停数：${stockData.limitUpCount || '未知'}
- 跌停数：${stockData.limitDownCount || '未知'}
- 大涨(>5%)：${stockData.bigRiseCount || '未知'}
- 大跌(<-5%)：${stockData.bigFallCount || '未知'}

市场表现：
- 平均涨跌幅：${stockData.avgChangePercent || '未知'}%
- 总成交额：${stockData.totalTurnover || '未知'}
- 活跃股票数：${stockData.activeStocks || '未知'}

请基于以上数据进行市场整体分析。`;
    }
  }

  /**
   * 检查API连接状态
   */
  async checkConnection(): Promise<boolean> {
    try {
      await this.generateText('测试连接', '请回复"连接成功"', {
        max_tokens: 10,
        temperature: 0
      });
      return true;
    } catch (error) {
      console.error('DeepSeek API连接检查失败:', error);
      return false;
    }
  }
}

// 单例模式导出
export const deepSeekAPI = new DeepSeekAPI();